/**
 *  根据文件组 groupId、文件Id、文件名称来删除文件
 */
import { Request, Response } from "express";
import { putBucket } from "../plugins/oss/bucket";
import client from "../plugins/oss/client";

export default async (req: Request, res: Response) => {
  try {
    /**
     * groupId 文件组ID
     * fileId 文件ID
     */
    const { groupId, fileId } = req.query;

    // 校验文件组ID不能为空
    if (!groupId) {
      res.send({
        code: 500,
        data: null,
        msg: "文件组ID不能为空",
      });
      return;
    }

    // 校验文件ID不能为空
    if (!fileId) {
      res.send({
        code: 500,
        data: null,
        msg: "文件ID不能为空",
      });
      return;
    }

    // 设置 OSS 的 bucket
    await putBucket();

    // 获取文件组里面所有的文件，最多1000个文件
    const { objects = [] } = await client.list(
      {
        prefix: `${groupId}/`, // 根据文件名或路径前缀过滤
        "max-keys": 1000, // 每次查询的最大文件数量
      },
      {}
    );

    // 拿取文件组中对应文件ID的文件
    const fileObj = objects.find((file) => file.name.includes(<string>fileId));

    // 文件不存在时，报错
    if (!fileObj?.url) {
      res.send({
        code: 500,
        data: null,
        msg: "该文件不存在",
      });

      return;
    }

    // 文件存在时删除文件
    await client.delete(fileObj?.name);

    res.send({
      code: 0,
      data: null,
      msg: "删除文件成功",
    });
  } catch (err) {
    console.log(err);
    res.send({
      code: 500,
      data: null,
      msg: "删除文件异常",
    });
  }
};
